<?php

// 严格模式
declare(strict_types=1);

// 命名空间
namespace Kingbes\Gui\Control;

use Kingbes\Gui\Font;
use Kingbes\Raylib\Text; // 文本
use Kingbes\Raylib\Shapes; // 形状
use Kingbes\Raylib\Utils; // 工具

/**
 * 按钮类
 */
class Button extends Base
{
    // 按钮值
    public string $value;
    // 按钮X位置
    public int $x;
    // 按钮Y位置
    public int $y;
    // 默认边框大小
    public int $borderWidth = 1;

    /**
     * 构造函数
     *
     * @param string $value 按钮值
     */
    public function __construct(string $value)
    {
        parent::__construct();
        $this->value = $value;
        Font::addText($value);
    }

    /**
     * 绑定事件
     *
     * @param string $event 事件名
     * @param callable $fn 事件回调函数
     * @return void
     */
    public function on(string $event, callable $fn): void {
        
    }

    /**
     * 绘制按钮
     *
     * @return void
     */
    public function draw(): void
    {
        // 字体宽高
        $value_size = Text::measureTextEx(Font::$font, $this->value, $this->size, 0);

        // 绘制边框盒子
        $border_size = Utils::rectangle(
            $this->x,
            $this->y,
            $value_size->x + 12,
            $value_size->y + 6
        ); // 边框大小
        Shapes::drawRectangleRoundedLines(
            $border_size,
            $this->borderRadius,
            $this->borderWidth,
            $this->borderColor
        );
        // 绘制背景盒子
        $btn_bgc = Utils::rectangle(
            $this->x + $this->borderWidth,
            $this->y + $this->borderWidth,
            $value_size->x + 12 - $this->borderWidth * 2,
            $value_size->y + 6 - $this->borderWidth * 2,
        );
        Shapes::drawRectangleRounded(
            $btn_bgc,
            $this->borderRadius,
            $this->borderWidth,
            $this->backgroundColor
        );
        // 绘制文本在背景盒子中间
        Text::drawTextEx(
            Font::$font,
            $this->value,
            Utils::vector2(
                $this->x + $this->borderWidth + 6,
                $this->y + $this->borderWidth + 3
            ),
            $this->size,
            $this->letterSpacing,
            $this->fontColor
        );
    }
}
